﻿using BLevy.Entidad;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BLevy.UI
{
    public partial class frmSociosFiltroListadoCumpleanos : Form
    {

        IList<Socio> sociosL = new List<Socio>();
        public frmSociosFiltroListadoCumpleanos()
        {
            InitializeComponent();
        }

        private void IniciarControles()
        {
            cblEdades.Enabled = false;
        }

        private void frmSociosFiltroListadoCumpleanos_Load(object sender, EventArgs e)
        {
            IniciarControles();
        }

        private void GetEdades(DateTime mes)
        {
            int _mes = mes.Month;

            try
            {
                sociosL = Negocio.Socios.FindAllConAdherentesPorMesCumpleaños(_mes);

                var query_edades = from fila in sociosL
                                   select new
                                   {
                                       edad = CalcularEdad(fila.fecha_nacimiento)
                                   };

                cblEdades.Items.Clear();
                foreach (var fila in query_edades.ToList().OrderBy(x => x.edad).Select(x => x.edad).Distinct())
                {
                    cblEdades.Items.Add(fila);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        private int CalcularEdad(DateTime fecha_nacimiento)
        {
            TimeSpan span = new TimeSpan();
            span = DateTime.Now.Date - fecha_nacimiento;
            int edad_socio = (int)Math.Truncate(span.TotalDays / 365.25);

            return edad_socio;
        }

        private void dtpMes_ValueChanged(object sender, EventArgs e)
        {
            GetEdades(dtpMes.Value);
        }

        private void ckbEdades_CheckedChanged(object sender, EventArgs e)
        {
            if (ckbEdades.CheckState == CheckState.Checked)
                cblEdades.Enabled = true;
            else
                cblEdades.Enabled = false;
        }

        private void GenerarListado(IList<Socio> sociosL, IList<int> edades)
        {
            try
            {
                IList<Afiliado> _afiliados = new List<Afiliado>();
                DataTable dt = new DataTable();
                dt.Columns.Add("numero_certificado", typeof(string));
                dt.Columns.Add("apellido", typeof(string));
                dt.Columns.Add("nombres", typeof(string));
                dt.Columns.Add("documento", typeof(string));
                dt.Columns.Add("fecha_nacimiento", typeof(DateTime));
                dt.Columns.Add("fecha_ingreso", typeof(string));
                dt.Columns.Add("fecha_vencimiento", typeof(DateTime));
                dt.Columns.Add("edad", typeof(string));

                int ano = DateTime.Now.Year;

                foreach (var fila in sociosL)
                {
                    fila.edad = CalcularEdad(fila.fecha_nacimiento);
                    foreach (var edad in edades)
                    {
                        if (fila.edad == edad)
                        {


                            DataRow row = dt.NewRow();
                            row["numero_certificado"] = fila.numero_certificado;
                            row["apellido"] = fila.apellido;
                            row["nombres"] = fila.nombres;
                            row["documento"] = fila.documento;
                            row["fecha_nacimiento"] = fila.fecha_nacimiento;
                            row["fecha_ingreso"] = "T";
                            row["fecha_vencimiento"] = new DateTime(ano, fila.fecha_nacimiento.Month, fila.fecha_nacimiento.Day);
                            row["edad"] = fila.edad;
                            dt.Rows.Add(row);
                        }
                    }

                    foreach (var fila_adherente in fila.adherentes)
                    {
                        fila_adherente.edad = CalcularEdad(fila_adherente.fecha_nacimiento);
                        foreach (var edad_adherente in edades)
                        {
                            if (fila_adherente.edad == edad_adherente)
                            {
                                DataRow row = dt.NewRow();
                                row["numero_certificado"] = fila.numero_certificado;
                                row["apellido"] = fila_adherente.apellido;
                                row["nombres"] = fila_adherente.nombres;
                                row["documento"] = fila_adherente.documento;
                                row["fecha_nacimiento"] = fila_adherente.fecha_nacimiento;
                                row["fecha_ingreso"] = "A";
                                row["fecha_vencimiento"] = new DateTime(ano, fila_adherente.fecha_nacimiento.Month, fila_adherente.fecha_nacimiento.Day);
                                row["edad"] = fila_adherente.edad;

                                dt.Rows.Add(row);
                            }
                        }
                    }
                }


                frmSociosReporteCumpleaños frm = new frmSociosReporteCumpleaños(dt);
                frm.MdiParent = this.MdiParent;
                frm.Show();
                this.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            List<int> edades = new List<int>();

            if(ckbEdades.CheckState == CheckState.Checked)
            {
                if (cblEdades.SelectedItems.Count > 0)
                {
                    for (int i = 0; i < cblEdades.Items.Count; i++)
                    {
                        if (cblEdades.GetItemChecked(i))
                            edades.Add((int)cblEdades.Items[i]);
                    }
                }
            }


            GenerarListado(sociosL, edades);
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        


    }
}
